// login.service.ts
import { ref, readonly } from 'vue'
import { type LoginParams, type LoginResponse, type UserInfo } from "@/store/login.d";
// 定义登录服务类
class LoginService {
  // 定义用户信息数据
  private userInfo = ref<UserInfo | null>(null)

  // 获取用户信息数据的只读副本
  get user() {
    return readonly(this.userInfo)
  }

  // 定义登录方法
  async login(phone: string, password: string): Promise<LoginResponse> {
    try {
      // 调用微信登录接口
      const { code } = await uni.login({ provider: 'weixin' })

      // 发送请求到开发者服务器，换取用户唯一标识和会话密钥
      const  {data}  = await uni.request<LoginResponse>({
        url: import.meta.env.VITE_BASE_URL + "/login", // 您的服务器地址
        method: 'POST',
        data: {
          code, // 登录凭证
          phone, // 手机号
          password // 密码
        }
      })

      // 判断服务器返回的状态码是否为200，表示登录成功
      if (data.code === 200) {
        // 存储用户信息到本地缓存
        uni.setStorageSync('userInfo', data.data)

        // 更新用户信息数据
        this.userInfo.value = data.data

        // 返回成功的响应
        return {
          success: true,
          message: '登录成功',
          code: 200,
          data: data.data
        }
      } else {
        // 返回失败的响应
        return {
          success: false,
          message: data.message,
          code: data.code,
          data: null
        }
      }
    } catch (error) {
      // 返回异常的响应
      return {
        success: false,
        message: error.message,
        code: error.code,
        data: null
      }
    }
  }
}

// 创建登录服务实例
const loginService = new LoginService()

// 定义获取登录服务实例的方法，用于在组件中使用
export function useLoginService() {
  return loginService
}
